package 面向对象.实验10;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class ServerThread02 extends Thread {
    /*
     * 服务器线程处理类*/
    Socket socket;  //和本线程相关的socket
    DataInputStream dis;
    DataOutputStream dos;

    public ServerThread02(Socket socket) throws IOException {
        this.socket = socket;
        //获取数据输入流
        dis = new DataInputStream(socket.getInputStream());
        //获取数据输出流
        dos = new DataOutputStream(socket.getOutputStream());
        //启动run()方法
        start();
    }

    //线程执行的操作，响应客户端的请求
    public void run() {
        try {
            boolean flag = true;
            while (flag) {
                //读取客户端发送到数据
                String req = dis.readUTF();//从socket中读取数据
                System.out.println("###服务器接收到客户端的数据为(圆的半径)：" + req);
                if (req.equals("end") == false) {
                    String area = Cal(req);//计算圆面积
                    dos.writeUTF(area);//向socket dos写数据
                    dos.flush(); //清空缓冲区，立即发送
                    System.out.println("答案是" + area);
                } else {
                    flag = false;
                    dos.writeUTF("end");//向socket dos写数据
                    dos.flush();//清空缓冲区，立即发送
                    System.out.println("S服务结束！");
                }

            }
            socket.close();
            dis.close();
            dos.close();

        } catch (IOException e) {

            e.printStackTrace();
        }
    }

    //计算圆面积的功能
    private String Cal(String req) {
        double r = 0.0;
        try {
            r = Double.parseDouble(req);//将String类型的半径转换为double型
        } catch (NumberFormatException e) {
            return "输入的数据格式不对！";
        }
        if (r < 0) return "输入数据不能小于0";
        double S = r * r * Math.PI;
        return Double.toString(S);//将double型转化成String类型返回
    }

}
